package com.woldier.check.controller;


import com.woldier.check.common.R;
import com.woldier.check.common.exception.BizException;
import com.woldier.check.service.CheckService;
import com.woldier.mp.dto.Client2FileDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;


@RestController
@ResponseBody
@RequestMapping("/check/v3/")
@Slf4j
public class CheckControllerV3 {

    @Autowired
    CheckService checkServiceImplV3;

    @Value("${wd.hadoop.proxy.url}")
    private String url;

    /**
     * 获取项目下的文件详细信息
     * @param username
     * @param repository
     * @return
     */
    @RequestMapping("/hadoop")
    public R list(@RequestParam String username, @RequestParam String repository){
        return R.success(checkServiceImplV3.getAll(username,repository));
    }

    /**
     * 远端上传json 文件 ,在文件上传之前比对哪些文件不是最新版本需要进行进行更新
     */
    @GetMapping("/download")
    public R beforeUpdate(@RequestBody Client2FileDto data, @RequestParam String username, @RequestParam String repository) throws BizException {
        return R.success(checkServiceImplV3.needDownload(data.getData(),username,repository));
    }

    /**
     * 上传逻辑是,上传我们就以本地的为准,本地给服务端文件表
     *
     * 服务端对比文件是否是最新的是最新的不用上传,不是服务端要求客户端上传;
     *
     * 若本地不存在,服务器存在服务端就删除;
     *
     * 如果本地存在,服务器不存在,说明是本地新建,我们要求它上传.
     * @param data 本地上传的文件信息
     * @param repository 项目目录
     * @param username
     * @return
     */
    @GetMapping("/update")
    public R checkNeedUpdate(@RequestBody Client2FileDto data, @RequestParam String username, @RequestParam String repository) throws BizException {
        //TODO 鉴权逻辑

        return R.success(checkServiceImplV3.checkUpdate(data.getData(),username,repository));
    }

    /**
     * 检查repo是否存在,若不存在返回成功,存在则返回失败交由GlobalException处理
     */
    @GetMapping("/checkRepo")
    public R checkRepo(@RequestParam String username, @RequestParam String repository) throws BizException {
        return R.success(checkServiceImplV3.checkRepo(username,repository));
    }

}
